package seguranca.helper;

import geral.exception.SegurancaException;

import java.util.Arrays;
import java.util.List;

import javax.faces.context.FacesContext;

import seguranca.manager.SegurancaManager;
import br.com.sgc.entities.seguranca.Usuario;

public class SegurancaManagerHelper {
	
	public static boolean temPermissao(String role, String aplicacao) {

		// obter usuário logado
		// TODO: injetar usuario com anotacao
		SegurancaManager manager = getSegurancaManager();
		Usuario usuarioLogado = manager.getUsuarioLogado();
		
		if (usuarioLogado == null) {
			// (ERRO) - usuário não logado?
			throw new SegurancaException();
		} 
		
		if (!usuarioLogado.isSuperUsuario() && role == null) {
			return false;
		}

		// super usuário tem permissão SEM restrições
		// HAPPY DAY - (usuário comum) - permissão depende de suas Roles
		if (usuarioLogado.isSuperUsuario()) {
			return true;
		} else {
			//TODO: Investigar forma mais barata de executar o código abaixo
			List<String> p = Arrays.asList(usuarioLogado.getPerfilUsuario().getPermissoes().split(","));
			return role.indexOf("*") > -1 ? p.toString().indexOf(role.substring(0, role.length()-1)) > 0 : p.contains(role);
		}
	}

	public static SegurancaManager getSegurancaManager() {
		FacesContext context = FacesContext.getCurrentInstance();
		SegurancaManager manager = (SegurancaManager) context
				.getApplication().evaluateExpressionGet(context,
						"#{segurancaManager}", SegurancaManager.class);
		return manager;
	}
}
